/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//		File Name		:		CEmitter.h
//
//		Author			:		Kevin Jordan
//
//		Purpose			:		A header for all functions and members of the EMitter class
//
//		Dates			:		Written( Feb 24, 2011 ) by Kevin Jordan		LastUpdate( Feb 24, 2011  ) by Kevin Jordan 
//	
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef CEMITTER_H_
#define CEMITTER_H_
#include <vector>
#include "MathLib.h"
#include "CParticle.h"
#include "tinyxml/tinyxml.h"
using std::vector;

class CEmitter
{

private:

	vector<CParticle*> vParticles;
	float m_fPosX;
	float m_fPosY;
	float m_fVelX;
	float m_fVelY;
	int m_nMaxNumOfParticles;

	float m_fSpread;
	float RandomOffsetX;
	float RandomOffsetY;

	////////////////////////
	// effects
	////////////////////////
	VIN_Vector2D GravityGen;
	VIN_Vector2D GravityPoint;
	VIN_Vector2D GravityVel;
	CParticle BaseParticle;
	CEmitter(const CEmitter& copy);
	CEmitter& operator=(const CEmitter& assign);


public:

	CEmitter();
	~CEmitter();

	////////////////////////////////////////////
	////////////////////////////////////////////
	//	Accessors & Modifiers
	////////////////////////////////////////////
	////////////////////////////////////////////
	//	Accessors
	////////////////////////////////////////////
	float GetPosX() {return m_fPosX;}
	float GetPosY() { return m_fPosY;}
	float GetVelX()	 { return m_fVelX; }
	float GetVelY()	 { return m_fVelY;}
	float GetSpread()	{ return m_fSpread;}
	float GetOffSetX() { return RandomOffsetX; }
	float GetOffSetY() { return RandomOffsetY; }

	////////////////////////////////////////////
	////////////////////////////////////////////
	//	Mutators
	////////////////////////////////////////////
	////////////////////////////////////////////

	void SetPosX(float newX) {m_fPosX = newX;}
	void SetPosY(float newY) { m_fPosY = newY;}
	void SetVelX(float newX)	 { m_fVelX = newX; }
	void SetVelY(float newY)	 { m_fVelY = newY;}
	void SetSpread(float newSpread)	{ m_fSpread = newSpread;}
	void SetOffSetX(float newOffSetX) { RandomOffsetX  = newOffSetX; }
	void SetOffSetY(float newOffSetY)	{ RandomOffsetY = newOffSetY; }

	bool Load(const char* EmitterLoc );

	void Render();
	void Update(float fElapsedTime);
	void CreateParticle();
};


#endif